// 给定一个数组nums，nums是升序数组经过旋转得到的，但是旋转次数未知，
// 数组中不存在重复元素，要求找出数组中的最小元素,旋转操作：将数组整体右移若干位置

// 思路：二分查找，左闭右闭,旋转后的有序数组，情况一是两个升序，情况二则还是一个升序
// 如果midVal大于right的值，则说明最小值在mid的右侧，更新left
// 如果midVal小于等于right的值，则说明最小值在mid的左侧，更新right

// 时间复杂度为Ologn
// 空间复杂度为O1

function findMin(arr) {
    let left = 0
    let right = arr.length - 1
    while (left < right) {
        let mid = Math.floor((right - left) / 2) + left
        if (arr[mid] > arr[right]) {
            left = mid + 1
        } else {
            right = mid
        }
    }
    return left
}

let arr = [3, 4, 5, 1, 2]
console.log(findMin(arr));